import { Card, CardCombination, CardRank } from './card'

// 玩家类型
export enum PlayerType {
  HUMAN = 'human',
  AI = 'ai'
}

// 玩家位置
export enum PlayerPosition {
  TOP = 'top',      // 玩家2 (上方)
  RIGHT = 'right',  // 玩家1 (右方)
  BOTTOM = 'bottom', // 当前玩家 (下方)
  LEFT = 'left'     // 玩家3 (左方)
}

// 游戏阶段
export enum GamePhase {
  SETUP = 'setup',           // 游戏设置
  PLAYING = 'playing',       // 游戏进行中
  WAITING_AI = 'waiting-ai', // 等待AI出牌
  FINISHED = 'finished'      // 游戏结束
}

// 玩家接口
export interface Player {
  id: number                 // 玩家ID (0-3)
  name: string              // 玩家名称
  type: PlayerType          // 玩家类型
  position: PlayerPosition  // 玩家位置
  handCards: Card[]         // 手牌
  currentPlay: Card[]       // 当前出牌
  isActive: boolean         // 是否为当前玩家
  teamId: number            // 队伍ID (0或1)
  currentLevel: CardRank    // 当前打到的级别
  isFinished: boolean       // 是否已出完牌
}

// 游戏历史记录
export interface GameHistory {
  id: string                // 记录ID
  round: number            // 轮次
  playerId: number         // 玩家ID
  playerName: string       // 玩家名称
  cards: Card[]            // 出牌
  combination: CardCombination // 牌型组合
  timestamp: Date          // 时间戳
}

// 游戏配置
export interface GameConfig {
  aiCards: Card[]          // AI玩家手牌
  trumpCard: Card | null   // 级牌
  firstPlayer: number      // 首次出牌玩家座位号 (0-3)
  currentLevel: CardRank   // 当前级别（打几）
}

// AI出牌选择状态
export interface AIPlaySelection {
  selectedCards: Card[]    // AI选中的卡牌
  isSelecting: boolean     // 是否正在选择
  isConfirming: boolean    // 是否正在确认
  shouldPass: boolean      // AI是否建议过牌
  hasError: boolean        // 接口是否出错
  errorMessage: string     // 错误信息
}

// 游戏状态
export interface GameState {
  players: Player[]        // 四个玩家
  currentRound: number     // 当前轮次
  currentPlayer: number    // 当前玩家ID
  gamePhase: GamePhase     // 游戏阶段
  config: GameConfig       // 游戏配置
  history: GameHistory[]   // 游戏历史
  lastPlay: CardCombination | null // 上一次出牌
  lastPlayerId: number | null // 上一次出牌的玩家ID
  consecutivePasses: number // 连续过牌次数
  aiPlaySelection: AIPlaySelection // AI出牌选择状态
  winnerTeamId: number | null // 获胜队伍ID
  ranks: number[]          // 已出完玩家的ID数组,按出完顺序排列
}

// 玩家座位号映射 (逆时针布局)
// 界面布局:     玩家2(上)
//         玩家3(左)   玩家1(右)
//              AI(下)
// 逆时针出牌顺序(按ID): AI(0,下) → 玩家1(1,右) → 玩家2(2,上) → 玩家3(3,左) → AI(0,下)...
export const SEAT_POSITIONS: Record<number, PlayerPosition> = {
  0: PlayerPosition.BOTTOM, // AI玩家 (下方)
  1: PlayerPosition.RIGHT,  // 玩家1 (右方) - 与玩家3交换位置
  2: PlayerPosition.TOP,    // 玩家2 (上方)
  3: PlayerPosition.LEFT    // 玩家3 (左方) - 与玩家1交换位置
}

// 逆时针出牌顺序映射 (按玩家ID递增)
// 逆时针顺序: AI(0,下) → 玩家1(1,右) → 玩家2(2,上) → 玩家3(3,左) → AI(0,下)...
export const COUNTERCLOCKWISE_ORDER: Record<number, number> = {
  0: 1, // AI(下) → 玩家1(右)
  1: 2, // 玩家1(右) → 玩家2(上)
  2: 3, // 玩家2(上) → 玩家3(左)
  3: 0  // 玩家3(左) → AI(下)
}

// 位置对应的玩家名称
export const POSITION_NAMES: Record<PlayerPosition, string> = {
  [PlayerPosition.TOP]: '玩家2',
  [PlayerPosition.RIGHT]: '玩家1',  // 右方是玩家1
  [PlayerPosition.BOTTOM]: 'AI玩家',
  [PlayerPosition.LEFT]: '玩家3'    // 左方是玩家3
}